/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.imp;

import dao.AirLineDAOException;
import dao.Conexao;
import dao.VooDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Voo;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Carlos
 */
public class VooDAOImpl implements VooDAO{

    /**
     * Variavel para armazenar o objeto de conexao, enviado pelo Conexao.getConnection()
     */
    private Connection conn;

    /**
     * Construtor
     * @throws AirLineDAOException
     */
    public VooDAOImpl() throws AirLineDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new AirLineDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    /**
     * Metodo chamado para executar query para atualizar voo na tabela
     * voo do banco de dados
     * @param voo
     * @throws AirLineDAOException
     */
    public void atualizarVoo(Voo voo) throws AirLineDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (voo == null) {
            throw new AirLineDAOException("Nenhum voo foi informado!");
        }

        try{
            String sql= "UPDATE voo SET numVoo=?, localOrigem=?, "
                        + "localDestino=?, data=?, hora=?, capacidade";
            conn1= this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, voo.getNumVoo());
            ps.setString(2, voo.getLocalOrigem());
            ps.setString(3, voo.getLocalDestino());
            ps.setString(4, voo.getData());
            ps.setString(5, voo.getHora());
            ps.setString(5, voo.getCapacidade());
            ps.executeUpdate();
        }catch (SQLException e) {
            throw new AirLineDAOException("Erro ao atualizar usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }
    /**
     * Metodo chamado para executar query para excluir voo na tabela
     * voo do banco de dados
     * @param voo
     * @throws AirLineDAOException
     */
    public void excluirVoo(Voo voo) throws AirLineDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (voo == null) {
            throw new AirLineDAOException("Nenhum voo foi informado!");
        }
        try{
            String sql= "DELETE FROM voo WHERE numVoo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, voo.getNumVoo());
            ps.executeUpdate();
        }catch (SQLException e) {
            throw new AirLineDAOException("Erro ao excluir usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    /**
     * Metodo chamado para executar query para salvar voo na tabela
     * voo do banco de dados
     * @param voo
     * @throws AirLineDAOException
     */
    
    public void salvarVoo(Voo voo) throws AirLineDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (voo == null)
            throw new AirLineDAOException("Nenhum voo foi informado!");
        try{
            String sql = "INSERT INTO voo (numVoo, localOrigem, localDestino, data, hora, " +
                    "capacidade) " +
                    "values (?, ?, ?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, voo.getNumVoo());
            ps.setString(2, voo.getLocalOrigem());
            ps.setString(3, voo.getLocalDestino());
            ps.setString(4, voo.getData());
            ps.setString(5, voo.getHora());
            ps.setString(6, voo.getCapacidade());
            ps.executeUpdate();
        }catch (SQLException e){
            throw new AirLineDAOException("Erro ao inserir usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    public List todosVoos() throws AirLineDAOException{
        PreparedStatement ps= null;
        Connection conn1= null;
        ResultSet rs= null;

        try{
            String sql= "Select * FROM voo";
            conn1= this.conn;
            ps= conn1.prepareStatement(sql);
            rs= ps.executeQuery();
            List<Voo> listVoos = new ArrayList<Voo>();
            while(rs.next()){
                String numVoo= rs.getString("numVoo");
                String localOrigem= rs.getString("localOrigem");
                String localDestino= rs.getString("localDestino");
                String data= rs.getString("data");
                String hora= rs.getString("hora");
                String capacidade= rs.getString("capacidade");
                listVoos.add(new Voo(numVoo, localOrigem, localDestino, data, hora, capacidade));
            }return listVoos;
        }catch(SQLException e){
            throw new AirLineDAOException("Erro ao listar os Voos" + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }


    public Voo buscarVoo(String numVoo) throws AirLineDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        Voo voo= new Voo();

        try {
            String sql = "SELECT * FROM reserva WHERE numVoo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, voo.getNumVoo() );
            rs = ps.executeQuery();
            if( !rs.next()) {
                throw new AirLineDAOException("Nao foi encontrado nenhum voo com os Dados " + voo.getNumVoo());
            }
            String numVoo1 = rs.getString("numVoo");

            Voo voo1 = new Voo(numVoo);
            return voo1;
        } catch (SQLException e){
            throw new AirLineDAOException("Erro ao procurar voo " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    /*public List buscarVoo(String localOrigem, String localDestino) throws AirLineDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        Voo voo= new Voo();

        try {
            String sql = "SELECT * FROM reserva WHERE localOrigem=? and localDestino=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, voo.getLocalOrigem() );
            ps.setString(2, voo.getLocalDestino() );
            rs = ps.executeQuery();
            List<Voo> listVoos = new ArrayList<Voo>();
            while(rs.next()){
                String localOrigem1= rs.getString("localOrigem");
                String localDestino1= rs.getString("localDestino");
                listVoos.add(new Voo(localOrigem, localDestino));
            }return listVoos;
        } catch (SQLException e){
            throw new AirLineDAOException("Erro ao procurar voo " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }

    }*/


    
}
